﻿namespace Brjnk.Maps
{
    using System;

    /// <summary>
    /// Reprezentuje načasovanou akci. Metody tohoto rozhraní jsou voláný z různých vláken!
    /// </summary>
    public interface IScheduledAction
    {
        /// <summary>
        /// True, pokud objekt vyžaduje aktualizace průběhu voláním metody UpdateProgress()
        /// </summary>
        bool ProgressRequired { get; }

        /// <summary>
        /// Spustí akci.
        /// </summary>
        void Execute(TicksTime time);

        /// <summary>
        /// Vynuluje stav objektu. Tato metoda je zavolána při přidání tohoto objektu do časovače
        /// </summary>
        void Reset(TicksTime startTime, TicksTime endTime);

        /// <summary>
        /// Aktualizuje zbývající čas do spuštění akce
        /// </summary>
        void UpdateProgress(TimeSpan remainingTime);
    }
}